package org.wdcode.web.http;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.apache.http.cookie.Cookie;
import org.wdcode.common.interfaces.Close;

/**
 * 实现HTTP模拟浏览器提交的接口 使用HttpFactory获得实例
 * @see org.wdcode.web.http.HttpClientFactory
 * @author WD
 * @since JDK6
 * @version 1.0 2009-06-03
 */
public interface HttpClient extends Close {
	/**
	 * 获得当前的URL
	 * @return URL地址
	 */
	public String getCurrentURL();

	/**
	 * 设置连接超时
	 * @param value 毫秒数
	 */
	public void setTimeOut(long value);

	/**
	 * 获得所有Cookie列表
	 * @return Cookie列表
	 */
	public List<Cookie> getCookies();

	/**
	 * 添加Cookie
	 * @param cookie Cookie对象
	 */
	public void addCookie(Cookie cookie);

	/**
	 * 添加Cookie
	 * @param name Cookie名
	 * @param value Cookie值
	 */
	public void addCookie(String name, String value);

	/**
	 * 根据name获得Cookie
	 * @param name cookie名
	 * @return Cookie 如果没有找到返回null
	 */
	public Cookie getCookie(String name);

	/**
	 * 根据name获得Cookie值
	 * @param name cookie名
	 * @return Cookie值 如果没有找到返回""
	 */
	public String getCookieValue(String name);

	/**
	 * 获得HttpContext的属性
	 * @param id 属性ID
	 * @return 获得的对象
	 */
	public Object getAttribute(String id);

	/**
	 * 模拟get提交
	 * @param url get提交地址
	 * @return InputStream 提交后的流
	 */
	public InputStream doGet(String url);

	/**
	 * 模拟get提交
	 * @param url get提交地址
	 * @param referer referer地址
	 * @return InputStream 提交后的流
	 */
	public InputStream doGet(String url, String referer);

	/**
	 * 模拟post提交 默认使用UTF-8格式
	 * @param url post提交地址
	 * @param data 提交参数
	 * @return InputStream 提交后的流
	 */
	public InputStream doPost(String url, Map<String, String> data);

	/**
	 * 模拟post提交
	 * @param url post提交地址
	 * @param data 提交参数
	 * @param referer referer地址
	 * @return InputStream 提交后的流
	 */
	public InputStream doPost(String url, Map<String, String> data, String referer);

	/**
	 * 模拟post提交
	 * @param url post提交地址
	 * @param data 提交参数
	 * @param referer referer地址
	 * @param encoding 提交参数的编码格式
	 * @return InputStream 提交失败
	 */
	public InputStream doPost(String url, Map<String, String> data, String referer, String encoding);

}
